#ifndef __STAT_ENGINE__
#define __STAT_ENGINE__

#include <ostream>
#include "types.h"

using namespace std;

class Stat_engine {
public:
	Stat_engine (); // used for global statistics engines
    Stat_engine (Module *m);
    virtual ~Stat_engine (void);
    
    Module *my_module;   

    virtual void global_stat_merge(Stat_engine *) = 0;
    virtual void print_stats (ostream & out) = 0;
    virtual void clear_stats() = 0;

    //TODO remove start_warmup, end_warmup, save_samples, commit_stats, rollback_stats?
    virtual void start_warmup () = 0;
    virtual void end_warmup () = 0;
    virtual void save_samples () = 0;
};

#endif
